//网络请求结果：aaa 自己先处理
//处理后的aaa结果拼接111 传给下一步 然后在处理
//上一步结束后拼接222，再进行处理
new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('aaa')
  }, 1000)
}).then(res => {
  console.log(res, '处理处理');
  return new Promise((resolve, reject) => {
    resolve(res + '111')  //没有进行异步操作，我们的目的是为了拿到第一个的数据
  }).then(res => {
    console.log(res, '第二次处理');
    return new Promise((resolve, reject) => {
      resolve(res + '222')
    }).then(res => {
      console.log(res, '第三次处理');
      console.log('_________________________________');
    })
  })
})

//我们还可以这么做，因为Promise自己设定的可以不用new了
new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('bbb')
  }, 1000)
}).then(res => {
  console.log(res, '处理处理');
  return Promise.resolve(res + '333').then(res => {
    console.log(res, '第bbb二次处理');
    return Promise.resolve(res + '444').then(res => {
      console.log(res, '第bbb三次处理');
      console.log('_________________________________');
    })
  })
})
//我们还可以直接return 连promise.resolve都能省略
new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('ccc')
  }, 1000)
}).then(res => {
  console.log(res, '处理处理');
  return res + '555'
}).then(res => {
  console.log(res, '第bbb二次处理');
  return res + '666'
}).then(res => {
  console.log(res, '第bbb三次处理');
  console.log('_________________________________');
})

//目前我们每层都是成功的，如果有某一层失败了该怎么办
new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('ddd')
  }, 1000)
}).then(res => {
  console.log(res, '处理处理');
  return new Promise((resolve, reject) => {
    reject('err')  //这里我们假设这一部网络请求出错了
  }).then(res => {
    console.log(res, '第二次处理');
    return new Promise((resolve, reject) => {
      resolve(res + '222')
    }).then(res => {
      console.log(res, '第三次处理');
      console.log('_________________________________');
    })
  })
}).catch(err => {
  console.log(err);
  console.log('_________________________________'); //这里从err触发开始，后面的代码就不会执行了
})

//如果我们有err，那么每行就不要写new Promise了
new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('eee')
  }, 1000)
}).then(res => {
  console.log(res, '处理处理');
  return Promise.reject('error message').then(res => { //这里我们有reject的简写方式
    console.log(res, '第二次处理');
    return new Promise((resolve, reject) => {
      resolve(res + '222')
    }).then(res => {
      console.log(res, '第三次处理');
      console.log('_________________________________');
    })
  })
}).catch(err => {
  console.log(err);
  console.log('_________________________________'); //这里从err触发开始，后面的代码就不会执行了
})